package cn.com.headfree.workflowant.service;

import java.util.List;

import com.gta.edu.sdk.base.service.IBaseService;
import com.gta.edu.sdk.common.dto.Page;

import cn.com.headfree.base.controller.ResultData;
import cn.com.headfree.entity.TBusinessWorkflowBind;
import cn.com.headfree.entity.TMouldInfo;
import cn.com.headfree.entity.TOrgDept;
import cn.com.headfree.entity.isc.User;
import cn.com.headfree.vo.workflow.ProcessListVo;
import cn.com.headfree.workflowant.dto.ApproveWorkFlowDto;

/**  
 * @Title  IWorkFlowAntService.java   
 * @Package cn.com.headfree.workflowant.service   
 * @Description 流程service
 * @author yangwang 
 * @date  2020年7月29日 下午5:38:43   
 */
public interface IWorkFlowAntService extends IBaseService<ApproveWorkFlowDto> {
	
	/**
	 * 获取所有一级单位
	 * @author yangwang
	 * @return  List<TOrgDept>
	 *  */
	List<TOrgDept> getWorkFlowUnits();
	
	/**
	 * 获取所有业务类型
	 * @author yangwang
	 * @return  List<TMouldInfo>
	 *  */
	List<TMouldInfo> getMouldInfoList();
	
	/**
	 * 获取当前人待办/已办业务类型
	 * @author yangwang
	 * @param erpNo erp编码
	 * @param status (0-待审核,1-通过,2-不通过,3-驳回，-1-全部)
	 * @return  List<TMouldInfo>
	 *  */
	List<TMouldInfo> getMouldsOfUser(ProcessListVo process);
	
	/**
	 * 获取系统配置的工作流模板
	 * @author yangwang
	 * @return ResultData
	 * @throws Exception 
	 *  */
	ResultData getWorkFlowTemplates() throws Exception;
	
	/**
	 * 更新流程绑定
	 * @author yangwang
	 * @param bind 绑定信息
	 *  */
	void updateWorkFlowBind(TBusinessWorkflowBind bind);
	
	/**
	 * 添加业务流程
	 * @author yangwang
	 * @param user 统一权限用户
	 * @param businessTypeId 业务类型id
	 * @param businessId 业务id
	 * @param approveAdvise 审批意见
	 * @param approveCondition 审批条件
	 * @return ResultData
	 *  */
	ResultData addWorkFlow(User user,String businessTypeId,String businessId,String approveAdvise,String approveCondition);
	
	/**
	 * 审批业务流程
	 * @author yangwang
	 * @param user 统一权限用户
	 * @param businessTypeId 业务类型id
	 * @param businessId 业务id
	 * @param approveId 审批节点id
	 * @param approveResult 审批状态(1-通过,2-不通过)
	 * @param approveAdvise 审批意见
	 * @param approveCondition 审批条件
	 * @return ResultData
	 *  */
	ResultData approveWorkFlow(User user,ApproveWorkFlowDto flowDto);

	/**
	 * 获取待办业务流程数据
	 * @author yangwang
	 * @param page 分页参数
	 * @param user 统一权限用户
	 * @return ResultData
	 *  */
	ResultData getWaitApproveWorkFlows(Page<ApproveWorkFlowDto> page,User user);
	
	/**
	 * 获取已办业务流程数据
	 * @author yangwang
	 * @param page 分页参数
	 * @param user 统一权限用户
	 * @return ResultData
	 *  */
	ResultData getDoneApproveWorkFlows(Page<ApproveWorkFlowDto> page,User user);
	
	/**
	 * 获取下一审批节点数据
	 * @author yangwang
	 * @param approveId 审批id
	 * @return ResultData
	 *  */
	ResultData getNextWorkFlowConditions(String approveId);
	
	/**
	 * 获取审核进度列表数据
	 * @author yangwang
	 * @param page 分页
	 * @param process 进度数据
	 * @param user 统一权限用户
	 * @return ResultData
	 *  */
	ResultData approveProcessPage(Page<ProcessListVo> page,ProcessListVo process,User user);
	
	/**
	 * 根据业务ID获取该业务的审批记录
	 * @author yangwang
	 * @param businessId 业务id
	 * @return ResultData
	 * @throws Exception 
	 */
	ResultData findApprovedRecord(String businessId) throws Exception;
	
	/**
	 * 删除业务
	 * @author yangwang
	 * @param user 统一权限用户
	 * @param process
	 *  */
	ResultData deleteBusiness(User user,ProcessListVo process);

	ResultData test(String sysCode);
	
}
